package com.aiti.lulian.pay.strategy;


import com.aiti.lulian.pay.model.AliPayPreOrderData;
import com.aiti.lulian.pay.model.PayInfo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

/**
 * 生成支付信息的接口
 * <ul>
 *     <li>支付宝具体策略类实现</li>
 *     <li>微信具体策略类实现</li>
 * </ul>
 */
public interface PayStrategy {
    /**
     * 生成支付二维码的方法
     * @param payInfo 支付参数
     * @return 返回二维码的信息
     */
    AliPayPreOrderData genPayQrCode(PayInfo payInfo);

    /**
     * 获取生成Token
     * @param userId 用户Id
     * @return
     */
    String genToken(String userId);

    /**
     * 阿里支付成功的回调
     *
     * @param params 阿里传来的参数
     * @return
     */
    default String aliCallBack(Map<String, String> params) {
        return null;
    }

    default String callBack(HttpServletRequest request, HttpServletResponse response) throws Exception {
        return null;
    }

    /**
     * 查询订单状态
     * @param orderId 商户定单号
     * @return
     */
    String queryOrderState(String orderId) throws Exception;
}
